home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 038a / qbtree45.zip / MEMCOPY.ASM next >
Assembly Source File  |  1991-01-03  |  2KB  |  69 lines

  1. ;MEMCOPY.ASM   copy block of RAM to RAM by Cornel Huth
  2. ;
  3. ;QuickBASIC subroutine:
  4. ;
  5. ;   CALL MemCopy (FromSeg%, FromOff%, ToSeg%, ToOff%, count%, dir%)
  6. ;
  7. ;If dir% is positive, memory is copied from low to high RAM
  8. ;           negative, memory is copied from high to low RAM
  9. ;           zero, immediate exit
  10. ;
  11. ;If memory blocks do not overlap, generally a positive dir% should
  12. ;be used.
  13. ;
  14. PARMS   =       6
  15.  
  16. ArgFromSeg      EQU     [bp+16]
  17. ArgFromOff      EQU     [bp+14]
  18. ArgToSeg        EQU     [bp+12]
  19. ArgToOff        EQU     [bp+10]
  20. ArgCount        EQU     [bp+08]
  21. ArgDirection    EQU     [bp+06]
  22.  
  23. MemCopy_TEXT    SEGMENT word public 'CODE'
  24.                 ASSUME  cs:MemCopy_TEXT
  25.  
  26.                 PUBLIC  MemCopy
  27. MemCopy         PROC    far
  28.  
  29.                 push    bp
  30.                 mov     bp,sp
  31.                 push    di
  32.                 push    si
  33.                 push    ds
  34.                 pushf
  35.  
  36.                 mov     bx,ArgDirection
  37.                 mov     ax,[bx]
  38.                 or      ax,ax
  39.                 je      MemCopyXit      ;0 dir then exit
  40.                 std                     ;pos. dir then copy up memory
  41.                 js      CopyBackward    ;neg. dir then copy down memory
  42.                 cld
  43. CopyBackward:   mov     bx,ArgCount
  44.                 mov     cx,[bx]
  45.                 jcxz    MemCopyXit
  46.  
  47.                 mov     bx,ArgToOff     ;set up destination
  48.                 mov     di,[bx]
  49.                 mov     bx,ArgToSeg
  50.                 mov     es,[bx]
  51.                 mov     bx,ArgFromOff   ;set up source
  52.                 mov     si,[bx]
  53.                 mov     bx,ArgFromSeg
  54.                 mov     ds,[bx]
  55.  
  56.                 repz    movsb           ;copy
  57.  
  58.  MemCopyXit:    popf
  59.                 pop     ds
  60.                 pop     si
  61.                 pop     di
  62.                 pop     bp
  63.  
  64.                 RET     PARMS*2
  65. MemCopy         endp
  66. MemCopy_TEXT    ends
  67.                 END
  68.  
  69.